css node: Warn more
authorMatthias Clasen <mclasen@redhat.com>
Tue, 8 Dec 2015 21:51:21 +0000 (16:51 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 15 Dec 2015 13:41:16 +0000 (08:41 -0500)
gtk_css_node_insert_before/after can easily create cycles
which later lead to stack overflows. Even if we're not
catching all cycles here, at least we can detect obviously
invalid arguments, such as inserting a node next to itself.

gtk/gtkcssnode.c

index 0772369fae4913e093dd95e4a4b4309fd7585bbc..738d1e911685f9b5b48f9130efd2fc1ad3b3dbac 100644 (file)
@@ -873,6 +873,7 @@ gtk_css_node_insert_after (GtkCssNode *parent,
                            GtkCssNode *previous_sibling)
 {
   g_return_if_fail (previous_sibling == NULL || previous_sibling->parent == parent);
+  g_return_if_fail (cssnode != previous_sibling);
 
   if (cssnode->previous_sibling == previous_sibling &&
       cssnode->parent == parent)
@@ -890,6 +891,7 @@ gtk_css_node_insert_before (GtkCssNode *parent,
                             GtkCssNode *next_sibling)
 {
   g_return_if_fail (next_sibling == NULL || next_sibling->parent == parent);
+  g_return_if_fail (cssnode != next_sibling);
 
   if (cssnode->next_sibling == next_sibling && 
       cssnode->parent == parent)